home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / pacplus.c < prev    next >
C/C++ Source or Header  |  1999-12-07  |  3KB  |  159 lines

  1.  
  2. #include "driver.h"
  3. #include "vidhrdw/generic.h"
  4.  
  5.  
  6. static unsigned char decrypt1(unsigned char e)
  7. {
  8.     return e;
  9. }
  10.  
  11. static unsigned char decrypt2(unsigned char e)
  12. {
  13.     unsigned char d;
  14.  
  15.     d  = ((~e) & 0x80) >> 5;
  16.     d |= ((~e) & 0x40) << 1;
  17.     d |= (e & 0x20) >> 2;
  18.     d |= (e & 0x10) >> 4;
  19.     d |= (e & 0x08) << 2;
  20.     d |= ((~e) & 0x04) << 2;
  21.     d |= (e & 0x02) << 5;
  22.     d |= ((~e) & 0x01) << 1;
  23.  
  24.     return d;
  25. }
  26.  
  27. static unsigned char decrypt3(unsigned char e)
  28. {
  29.     unsigned char d;
  30.  
  31.     d  = (e & 0x80) >> 2;
  32.     d |= ((~e) & 0x40) >> 2;
  33.     d |= ((~e) & 0x20) >> 5;
  34.     d |= (e & 0x10) >> 1;
  35.     d |= ((~e) & 0x08) << 3;
  36.     d |= ((~e) & 0x04) >> 0;
  37.     d |= (e & 0x02) >> 0;
  38.     d |= ((~e) & 0x01) << 7;
  39.  
  40.     return d;
  41. }
  42.  
  43. static unsigned char decrypt4(unsigned char e)
  44. {
  45.     unsigned char d;
  46.  
  47.     d  = (e & 0x80) >> 0;
  48.     d |= (e & 0x40) >> 0;
  49.     d |= ((~e) & 0x20) >> 0;
  50.     d |= (e & 0x10) >> 0;
  51.     d |= ((~e) & 0x08) >> 0;
  52.     d |= (e & 0x04) >> 0;
  53.     d |= (e & 0x02) >> 0;
  54.     d |= (e & 0x01) >> 0;
  55.  
  56.     return d;
  57. }
  58.  
  59. static unsigned char decrypt5(unsigned char e)
  60. {
  61.     unsigned char d;
  62.  
  63.     d  = ((~e) & 0x80) >> 5;
  64.     d |= ((~e) & 0x40) << 1;
  65.     d |= ((~e) & 0x20) >> 0;
  66.     d |= (e & 0x10) >> 4;
  67.     d |= ((~e) & 0x08) >> 0;
  68.     d |= ((~e) & 0x04) << 2;
  69.     d |= (e & 0x02) << 5;
  70.     d |= ((~e) & 0x01) << 1;
  71.  
  72.     return d;
  73. }
  74.  
  75. static unsigned char decrypt6(unsigned char e)
  76. {
  77.     unsigned char d;
  78.  
  79.     d  = ((~e) & 0x80) >> 4;
  80.     d |= ((~e) & 0x40) >> 2;
  81.     d |= ((~e) & 0x20) >> 5;
  82.     d |= (e & 0x10) << 1;
  83.     d |= ((~e) & 0x08) << 3;
  84.     d |= ((~e) & 0x04) >> 0;
  85.     d |= (e & 0x02) >> 0;
  86.     d |= ((~e) & 0x01) << 7;
  87.  
  88.     return d;
  89. }
  90.  
  91. static unsigned char decrypt(int addr, unsigned char e)
  92. {
  93.     unsigned int method = 1;
  94.  
  95.     switch (addr & 0x2A5)
  96.     {
  97.         case 0x001:
  98.         case 0x201:
  99.         case 0x005:
  100.         case 0x025:
  101.         case 0x080:
  102.         case 0x084:
  103.         case 0x085:
  104.         case 0x0A5:
  105.         case 0x2A5:
  106.         case 0x200:
  107.         case 0x221:
  108.         case 0x2A1:
  109.             method = 2;
  110.             break;
  111.         case 0x004:
  112.         case 0x204:
  113.         case 0x020:
  114.         case 0x220:
  115.         case 0x024:
  116.         case 0x224:
  117.         case 0x0A0:
  118.         case 0x2A0:
  119.         case 0x0A4:
  120.         case 0x2A4:
  121.         case 0x281:
  122.         case 0x285:
  123.             method = 3;
  124.             break;
  125.     }
  126.  
  127.     if ((addr & 0x800) == 0x800)
  128.         method = method + 3;
  129.  
  130.     switch (method)
  131.     {
  132.         case 1:        return decrypt1(e);
  133.         case 2:        return decrypt2(e);
  134.         case 3:        return decrypt3(e);
  135.         case 4:        return decrypt4(e);
  136.         case 5:        return decrypt5(e);
  137.         case 6:        return decrypt6(e);
  138.     }
  139.  
  140.     return 0;
  141. }
  142.  
  143.  
  144. void pacplus_decode(void)
  145. {
  146.     int i;
  147.     unsigned char *RAM;
  148.  
  149.     /* CPU ROMs */
  150.  
  151.     RAM = memory_region(REGION_CPU1);
  152.     for (i = 0; i < 0x4000; i++)
  153.     {
  154.         RAM[i] = decrypt(i,RAM[i]);
  155.     }
  156. }
  157.  
  158.  
  159.